﻿using System;

namespace Td.Additional.Environment
{
    /// <summary>
    /// Command line parameter attribute.
    /// </summary>
    [AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = true)]
    public sealed class CommandLineParameterAttribute : Attribute
    {
        #region Properties

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>The name.</value>
        public String Name { get; set; }
        /// <summary>
        /// Gets or sets the short name.
        /// </summary>
        /// <value>The short name.</value>
        public String ShortName { get; set; }
        /// <summary>
        /// Gets or sets the description.
        /// </summary>
        /// <value>The description.</value>
        public String Description { get; set; }
        /// <summary>
        /// Gets or sets the option.
        /// </summary>
        /// <value>The option.</value>
        public ParameterOption Option { get; set; }
        /// <summary>
        /// Gets or sets the value option.
        /// </summary>
        /// <value>The value option.</value>
        public ValueOption ValueOption { get; set; }
        /// <summary>
        /// Gets or sets the default value.
        /// </summary>
        /// <value>The default value.</value>
        public Object DefaultValue { get; set; }
        /// <summary>
        /// Gets or sets the required parameters.
        /// </summary>
        /// <value>The required parameters.</value>
        public String Requires { get; set; }

        #endregion

        #region Constructors

        /// <summary>
        /// Initializes a new instance of the <see cref="CommandLineParameterAttribute"/> class.
        /// </summary>
        public CommandLineParameterAttribute()
        {
            Option = ParameterOption.Optional;
            ValueOption = ValueOption.Optional;
        }

        #endregion
    }
}